import time
import unittest
from selenium.webdriver.common.by import By
from selenium import webdriver
from Page.PayManage import PayManage
from Tools.Tools import Tools


class PayManageCase(unittest.TestCase):
    # 类方法调用
    @classmethod
    def setUpClass(cls):
        cls.logger = Tools().get_logger("Test.PayManage")

    # 测试固件
    def setUp(self):
        self.logger.info('测试开始')
        self.driver = webdriver.Edge()
        self.driver.maximize_window()
        self.po = PayManage(self.driver)
        # 从登录到点击支付管理操作
        self.forward()

    def tearDown(self):
        self.logger.info('测试结束')
        time.sleep(3)
        self.driver.quit()

    # 从登录到点击支付管理操作
    def forward(self):
        self.logger.info("执行前置操作: 登录并进入支付管理")
        self.po.login()
        dy_login = self.po.find_element((By.XPATH, '/html/body/div[1]/div[3]/div/div[2]/div/div/p[1]/span')).text
        # 登录成功断言
        self.assertEqual('龙果支付后台', dy_login)
        self.logger.info(f'------登录成功------,')
        self.logger.debug(f"登录成功断言{dy_login}")
        # 点击支付管理
        self.po.show_pay_manage()
        time.sleep(1)
        # 断言支付产品信息和用户支付配置
        dy2 = self.po.find_element((By.XPATH, '/html/body/div[1]/div[2]/div[2]/div[2]/div[8]/ul/li[1]/div/a')).text
        self.assertEqual('支付产品信息', dy2)
        dy3 = self.po.find_element((By.XPATH, '/html/body/div[1]/div[2]/div[2]/div[2]/div[8]/ul/li[2]/div/a')).text
        self.assertEqual('用户支付配置', dy3)
        time.sleep(1)
        self.logger.info(f'---------进入支付管理成功----------')
        self.logger.debug(f"进入支付管理获取到的元素文本: {dy2,dy3}")

    # 用例：支付产品列表正常显示
    def test_01_payment_list(self):
        self.logger.info('用例：支付产品列表正常显示')
        self.po.payment_order()
        dy = self.po.find_element((By.XPATH,'/html/body/div[1]/div[3]/div/div[2]/div[2]/div[2]/div[2]/div[1]/div/table/thead/tr/th[4]')).text
        self.assertEqual('是否上架', dy)  # add assertion here
        self.logger.debug(f'支付产品列表获取到的元素文本：{dy}')
        self.logger.info('-------支付产品列表正常显示-------')


    # 用例：上架支付产品，弹出二次确认提示框
    def test_02_audit_alert(self):
        self.logger.info('用例：上架支付产品，弹出二次确认提示框')
        self.po.audit_alert()
        time.sleep(1)
        # 断言提示框
        dy = self.po.find_element((By.XPATH,'/html/body/div[13]/div[1]/div/div[1]/div')).text
        self.logger.debug(f'断言提示框文本：{dy}')
        self.assertEqual('确定要上架吗?',dy)
        self.logger.info('结果：弹出二次确认提示框')

    # 用例：上架支付产品，选择取消，上架失败
    def test_03_audit_dismiss(self):
        self.logger.info('用例：上架支付产品，选择取消，上架失败')
        self.po.audit_dismiss()
        # 断言产品是否上架
        dy = self.po.find_element((By.XPATH,'/html/body/div[1]/div[3]/div/div[2]/div[2]/div[2]/div[2]/div[2]/div/table/tbody/tr[1]/td[4]/div')).text
        self.logger.info(dy)
        self.logger.debug(f'断言产品上架状态：{dy}')
        self.logger.info('结果：上架失败')

    # 用例：上架支付产品，选择确认，上架成功
    def test_04_audit_confirm(self):
        self.logger.info('用例：上架支付产品，选择确认，上架成功')
        self.po.audit_confirm()
        # 断言产品是否上架
        dy = self.po.find_element((By.XPATH,'/html/body/div[1]/div[3]/div/div[2]/div[2]/div[2]/div[2]/div[2]/div/table/tbody/tr[1]/td[4]/div')).text
        self.logger.debug(f'断言产品上架状态：{dy}')
        self.assertEqual('是',dy)
        self.logger.info('结果：上架成功')

    # 用例：下架支付产品，弹出二次确认提示框
    def test_05_takedown_alert(self):
        self.logger.info('用例：下架支付产品，弹出二次确认提示框')
        self.po.takedown_alert()
        time.sleep(1)
        # 断言提示框
        dy = self.po.find_element((By.XPATH, '/html/body/div[13]/div[1]/div/div[1]/div')).text
        self.logger.debug(f'断言提示框文本：{dy}')
        self.assertEqual('确定要下架吗?', dy)
        self.logger.info('结果：弹出二次确认提示框')

    # 用例：下架支付产品，选择取消，下架失败
    def test_06_takedown_dismiss(self):
        self.logger.info('用例：下架支付产品，选择取消，下架失败')
        self.po.takedown_dismiss()
        # 断言产品是否下架成功
        dy = self.po.find_element((By.XPATH,
                                   '/html/body/div[1]/div[3]/div/div[2]/div[2]/div[2]/div[2]/div[2]/div/table/tbody/tr[1]/td[4]/div')).text
        self.logger.debug(f'断言产品上架状态：{dy}')
        self.assertEqual('是', dy)
        self.logger.info('结果：下架失败')

    # 用例：下架支付产品，选择确认，下架成功
    def test_07_takedown_confirm(self):
        self.logger.info('用例：下架支付产品，选择确认，下架成功')
        self.po.takedown_confirm()
        # 断言产品是否上架
        dy = self.po.find_element((By.XPATH,
                                   '/html/body/div[1]/div[3]/div/div[2]/div[2]/div[2]/div[2]/div[2]/div/table/tbody/tr[1]/td[4]/div')).text
        self.logger.debug(f'断言产品上架状态：{dy}')
        self.assertEqual('否', dy)
        self.logger.info('结果：下架成功')





if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(PayManageCase)
    runner = unittest.TextTestRunner()
    # 执行
    runner.run(suite)
